//
// Created by sjjmw on 3/24/2022.
//

//应该使用dfs

#include "iostream"
#include "vector"
#include "list"
#include "algorithm"
#include "string"
#include "unordered_map"
#include "cmath"
#include<iomanip>
#include "string"
#include "map"
#include "list"
#include "queue"
//[将i] [分成j份] 的方案数
int dp[1001][301]={0};

struct Sol{

//    std::vector<int> dp;
    void handle(
            int n1
            ){
        printf("%d\n",dp[n1][n1]);

//        dp.resize(n1);
    }
};
int main(){
    int a,b,c;
//    float a,b,c,d;
    int e;
    dp[1][1]=1;
    for(int j=1;j<=300;j++){
        for(int i=1;i<=1000;i++){
            if(i==1){
                dp[i][j]=1;
                //                if(j>1){
                //                    //1被分多份，不可能
                //                }
            }else{
                if(i-j>=1){
                    dp[i][j]=dp[i][j-1]+//划分中没有j
                            dp[i-j][j];//划分中必有j
                }else if(i==j){
                    dp[i][j]=dp[i][j-1]+1;
                }else{//i<j
                    dp[i][j]=dp[i][j-1];
                }
            }
        }
    }
    while(std::cin>>a){
        Sol().handle(a);

//        Sol().handle(a,b);
    }

    return 0;
}